package com.ryujung.hash.leetCode_454;

import java.util.HashMap;
import java.util.Map;

class Solution {

    /**
     * 数组长度相同
     * 将四组数字分成两组，然后用hashmap保存（相加的值，出现次数）的键值对
     * 在第二组数字中找map中是否有其相反数，
     * 如果有，结果加上，map中该值出现的次数
     */
    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i : nums1) {
            for (int j : nums2) {
                map.put(j + i, map.getOrDefault(j + i, 0) + 1);
            }
        }
        int res = 0;
        for (int i : nums3) {
            for (int j : nums4) {
                int sum = i + j;
                if (map.containsKey(-sum)) {
                    res += map.get(-sum);
                }
            }
        }
        return res;
    }

    // Time Limit Exceeded
    public int fourSumCount000(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        int len = nums1.length;
        int res = 0;
        for (int i = 0; i < len; i++) {
            for (int j = 0; j < len; j++) {
                for (int k = 0; k < len; k++) {
                    for (int l = 0; l < len; l++) {
                        if (nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0) {
                            res++;
                        }
                    }
                }
            }
        }
        return res;
    }
}